package com.itheima.springboottlias.controller;


import Pojo.Dept;
import Pojo.Result;
import com.itheima.springboottlias.service.DeptService;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.net.http.HttpRequest;
import java.util.List;
import java.util.Map;

/*
*部门处理器，接收部门处理请求
* */
@RequestMapping("/depts")//写在类上时可以当作路径前缀
@RestController
public class DeptController {
    @Autowired
    private DeptService deptService;

    //创建日志对象Logger
    private static final Logger log = LoggerFactory.getLogger(DeptController.class);//lombok提供注解（@Slf4j）可以替代LoggerFactory.getLogger()

    @GetMapping
    public Result queryAll(){
        log.info("查询所有部门");
        List<Dept> rs = deptService.selectAll();
        log.info("查询所有部门结果："+rs);
        return Result.success(rs);
    }


    //删除制定部门处理器方法
//    @DeleteMapping("/depts")
//    public Result removeById(HttpServletRequest request ,@RequestParam("id") Integer id,Dept dept, @RequestParam Map map){
//        //1.接收请求参数：kv
//        //方式一：原始方式HTTPServletRequest
//       /* String idStr= request.getParameter("id");
//        int id= Integer.parseInt(idStr);*/
//
//        //方式二：使用框架，直接定义变量接收（请求数量少）
//         System.out.println("接到的请求参数："+id);
//
//         //方式三：使用框架，直接定义对象接收（请求数量较多）
//    System.out.println("定义对象接收参数:"+dept);
//
//    //方式四：框架，定义map对象接收（请求数量较多）
//    System.out.println("定义map接收参数:"+map.get("id"));
//
//        return null;
//    }
    @DeleteMapping
    public Result removeById(Integer id){
        deptService.removeById(id);
        return Result.success();
    }



    //添加部门处理器方法
    @PostMapping
    public Result save(@RequestBody Dept dept){
        //1.请求接收参数：json(请求体)
        // @RequestBody  定义实体对象或者使用Map对象接收请求参数
        log.info("接收到的请求参数："+dept);

        //2.调用业务层方法，完成添加
        deptService.saveDept(dept);
        //3.封装响应结果
        return Result.success();
    }

    //根据id查询部门处理器方法
    @GetMapping("/{id}")
    public Result findById(@PathVariable Integer id){
        //1.接收请求参数：路径参数，直接作为请求路径一部分
        //请求路径参数方式：@PathVariable  定义变量
        System.out.println("请求路径参数："+id);
        //2.调用业务层方法，查询部门数据
        Dept dept = deptService.findById(id);
        //3.封装响应结果
        return Result.success(dept);//code=1,msg=success,data=dept(部门详情)
    }

    //修改部门处理器方法
    @PutMapping
    public Result update(@RequestBody Dept dept){
        //1.接收请求参数：json(请求体)
        // @RequestBody  定义实体对象或者使用Map对象接收请求参数
        log.info("接收到的请求参数："+dept);

        //2.调用业务层方法，完成修改
         deptService.update(dept);
        //3.封装响应结果
        return Result.success();
    }

}
